if ( (page_to_mfn(pg) & mask) )
{
/* Merge with predecessor block? */
- if ( !page_state_is(pg-mask, free) ||
+ if ( !mfn_valid(page_to_mfn(pg-mask)) ||
+ !page_state_is(pg-mask, free) ||
(PFN_ORDER(pg-mask) != order) )
break;
pg -= mask;
else
{
/* Merge with successor block? */
- if ( !page_state_is(pg+mask, free) ||
+ if ( !mfn_valid(page_to_mfn(pg+mask)) ||
+ !page_state_is(pg+mask, free) ||
(PFN_ORDER(pg+mask) != order) )
break;
page_list_del(pg + mask, &heap(node, zone, order));
int ret = 0;
struct page_info *pg;
- if ( mfn > max_page )
+ if ( mfn_valid(mfn) )
{
dprintk(XENLOG_WARNING,
"try to offline page out of range %lx\n", mfn);
struct page_info *pg;
int ret;
- if ( mfn > max_page )
+ if ( !mfn_valid(mfn) )
{
dprintk(XENLOG_WARNING, "call expand_pages() first\n");
return -EINVAL;
{
struct page_info *pg;
- if ( (mfn > max_page) || !page_is_ram_type(mfn, RAM_TYPE_CONVENTIONAL) )
+ if ( !mfn_valid(mfn) || !page_is_ram_type(mfn, RAM_TYPE_CONVENTIONAL) )
{
dprintk(XENLOG_WARNING, "call expand_pages() first\n");
return -EINVAL;
pg = mfn_to_page(mfn);
/* Quick lock-free check. */
- if ( !page_state_is(pg, free) )
+ if ( !mfn_valid(mfn) || !page_state_is(pg, free) )
continue;
/* Every 100MB, print a progress dot. */